#ifndef cc9d
#define cc9d

#include "typedef.h"

#ifndef pkg_mem_type
#define pkg_mem_type
#endif

#ifdef __cplusplus
extern "C" {
#endif

typedef struct {
	uint8 from_port;//源端口号，发送方的端口号；
	uint8 to_port;//目的端口号，接收方的端口号；
	uint16 remote_addr;//远端地址，对于收到的包，是发送方地址，对于要发送的包，是接收方地址；
	uint8 datas[64];//数据部分，最大64字节
}sCc9dPkg;


//初始化cc9d解码器
//pkg: cc9d解码器的初始缓冲区，用于存放第一个收到的包。
void cc9d_init(sCc9dPkg pkg_mem_type* pkg);

//命令cc9d发送一个包
//pkg: 要发送的包
//data_len: 要发送的包的数据部分的长度，既除去地址、端口和CRC的部分的长度
void cc9d_SendPkg(sCc9dPkg pkg_mem_type* pkg, uint8 data_len);

//cc9d需要发送1byte时，会调用此函数。
extern void _cc9d_sendByte(uint8 b);


//外部程序收到1Byte数据时，调用此函数将数据交给解码器。
//b: 收到的数据
void cc9d_recvbyte(byte b);
//解码器收到一个包后，会调用此函数进行包处理
//pkg: 收到的包
//data_len: 收到的包的数据部分的长度，既除去地址、端口和CRC的部分的长度
//返回值: 用于接收下一个包的缓冲区
extern sCc9dPkg pkg_mem_type* _cc9d_receivePkg(sCc9dPkg pkg_mem_type* pkg, uint8 data_len);

#ifdef __cplusplus
}
#endif
#endif

